package com.reader;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class IniParser {
    private String filePath;  // 文件路径
    private Map<String, String> data;  // 存储解析后的键值对数据

    public IniParser(String filePath) {  // 构造函数，初始化文件路径和数据存储
        this.filePath = filePath;
        this.data = new HashMap<>();
        try {
            load();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public void load() throws IOException {  // 加载并解析INI文件
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {  // 使用try-with-resources语句，自动关闭资源
            String line;
            while ((line = reader.readLine()) != null) {  // 逐行读取文件内容
                line = line.trim();  // 去除首尾空格
                if (!line.isEmpty() && !line.startsWith(";") && line.contains("=")) {  // 判断是否为非空行且不是注释行且包含等号
                    String[] parts = line.split("=");  // 以等号分割键值对
                    if (parts.length == 2) {  // 判断是否成功分割为键值对
                        String key = parts[0].trim();  // 去除键的首尾空格
                        String value = parts[1].trim();  // 去除值的首尾空格
                        data.put(key, value);  // 存储键值对数据
                    }
                }
            }
        }
    }

    public String getValue(String key) {  // 根据键获取值
        return data.get(key);  // 返回对应键的值
    }

    public void setValue(String key, String value) {  // 设置键值对
        data.put(key, value);
    }

    public void removeKey(String key) {  // 删除键值对
        data.remove(key);
    }

    public void save() throws IOException {  // 保存数据到文件
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {  // 使用try-with-resources语句，自动关闭资源
            for (Map.Entry<String, String> entry : data.entrySet()) {  // 遍历数据，写入文件
                writer.write(entry.getKey() + "=" + entry.getValue());
                writer.newLine();
            }
        }
    }
}